package com.xiaolin.serializable;

import java.io.*;

/**
 * @ClassName SerializableTest
 * @Description 序列化测试
 * @Detail Java 提供了一种对象序列化的机制，该机制中，一个对象可以被表示为一个字节序列，该字节序列包括该对象的数据、有关对象的类型的信息和存储在对象中数据的类型。
 *          将序列化对象写入文件之后，可以从文件中读取出来，并且对它进行反序列化
 * @Author MyPC
 * @Date 2020/11/30
 * @Version 1.0
 */
public class SerializableTest {
    public static void main(String[] args) throws IOException, ClassNotFoundException {
        // 获取对象输出流
        ObjectOutputStream outputStream=new ObjectOutputStream(new FileOutputStream(new File("D:\\s.txt")));
        // 写出对象，持久化存储到磁盘
        outputStream.writeObject(new Student("小林",18,2244));
        // 获取对象输入流
        ObjectInputStream inputStream = new ObjectInputStream(new FileInputStream(new File("D:\\s.txt")));
        // 读取持久化到磁盘的对象
        Object o = inputStream.readObject();
        System.out.println(((Student)o).getAge());
        System.out.println(((Student)o).getName());
        // 不能序列化的属性将输出初始化零值
        System.out.println(((Student)o).getNum());
    }
}

/**
 * 实现序列化接口,才能将对象作为流进行存取操作
 */
class Student implements Serializable{
    private String name;
    private int age;
    // 不进行序列化
    private transient int num;

    public Student(String name,int age,int num){
        this.name=name;
        this.age=age;
        this.num=num;
    }

    public void setName(String name) {
        this.name = name;
    }

    public void setAge(int age) {
        this.age = age;
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public void setNum(int num) {
        this.num = num;
    }

    public int getNum() {
        return num;
    }
}